package com.gongj.rabbit.helloword;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * 生产者
 * 直连模式
 */
public class Provider {

    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("47.105.198.54");
        connectionFactory.setPort(5672);
        //设置连接哪个虚拟主机
        connectionFactory.setVirtualHost("/test-1");
        connectionFactory.setUsername("test");
        connectionFactory.setPassword("123456");
        // 获取连接对象
        Connection connection = connectionFactory.newConnection();
        // 获取连接通道
        Channel channel = connection.createChannel();

        /**
         * 参数1：String queue 队列名称 如果队列不存在会自动创建
         * 参数2：boolean durable  队列是否持久化 true 持久化 false 不持久化
         * 参数3：boolean exclusive 是否独占队列 true 独占队列 false 不独占
         * 参数4：boolean autoDelete 是否在消费完成后自动删除  true 自动删除
         * 参数5：Map<String, Object> arguments  额外附加参数
         */
        //通道绑定消息队列
        channel.queueDeclare("hello-1",false,false,false,null);

        /**
         * 参数1：String exchange  交换机名称
         * 参数2：String routingKey  队列名称
         * 参数3：BasicProperties props  传递消息额外参数
         * 参数4：byte[] body  消息的具体内容
         */
        //发布消息
        //channel.basicPublish("","hello-1", null,"hello rabbitmq".getBytes());
        //投递模式（delivery mode）设置为2 ，即消息会被持久化（存入磁盘）在服务器中。同时这条消息的优先级（priority）设置为 1, contentType
        //为 text/plain，userId为当前登录用户名。
        /*
        channel.basicPublish("exchangeName" , "routingKey",
                new AMQP.BasicProperties.Builder()
                        .contentType ("text/plain")
                        .deliveryMode(2)
                        .priority(1)
                        .userId("test")
                        .build(),
                "ddf".getBytes());*/
        //发送一条带有 headers 的消息
     /*   Map<String, Object> headers = new HashMap<String, Object>() ;
        headers.put("token","782");
                channel.basicPublish("", "hello-1",
        new AMQP.BasicProperties.Builder()
                .headers(headers)
                .build(),
        "5555".getBytes());*/
        channel.basicPublish("", "hello-1",
                new AMQP.BasicProperties.Builder()
                        . expiration ("10000")
                                .build(),
                "9999".getBytes());
        //关闭连接
        channel.close();
        connection.close();
    }
}
